//引入模块
const express = require('express')
const { userInfo } = require('os')
//path模块是用来拼接路径的
const path = require('path')
const app = express()
// express自带的获取body的中间件，form格式与json格式
app.use(express.urlencoded({
    extended: false
}))
app.use(express.json())
//因为我请求的时候给请求头添加了token，但是如果添加了请求头，就变成复杂请求，这就导致我发送的请求变成了options预检请求，预检请求会在get请求面前执行，如果服务端收不到便会报错，但是中间件会接受所有的请求，只要在中间件里接受预检请求就不会报错
app.use((request,response,next)=>{
    //模拟一个请求原网址的集合
    const allowAll=['http://127.0.0.1:5500','http://127.0.0.1:5001','http://127.0.0.1:5002','http://127.0.0.1:5003','http://127.0.0.1:5004']
    //将原地址拿来丢进网址集合查找，找到了便执行，没找到不执行
  if(allowAll.includes(request.headers.origin)){
    response.set('Access-Control-Allow-Origin',request.headers.origin)
    response.set('Access-Control-Allow-headers','token')
    next()
  }
    
})
app.get('/user', (request, response) => {
    //获取由客户端添加的token
    const token = request.headers.token
    //模拟一个数据库里存储的token
    console.log(token)
    const tokenData = 'dsdjhnasjdajksdajksdajksbasjkdjaskj'
    //将两个token拿来做判断，不相等既错误，执行代码，返回没有权限
    if (token !== tokenData) {
        return response.send({
            code: 001,
            msg: '没有权限',
            data: null
        })
    }
    // 用express的新方法获取查询字符串,并对象解构
    const { userID } = request.query
    //此时userID便是userID属性的值
    if (userID !== '001') {
        //代码的写法一般都是优先处理失败的,代码从右往执行,直接return终止错误代码继续执行
        return response.send({
            code: '000',
            msg: '查询失败',
            data: null
        })
    }
    // 执行成功往下执行,响应正确的数据
    response.send({
        code: '100',
        msg: '查询成功',
        data: {
            name: '晓月',
            age: 24,
            sex: '男'
        }
    })
})

app.listen('9000', () => {
    console.log('服务器部署成功 地址为http://127.0.0.1:9000');
})